// 监听push消息 以及 后台数据回复
import phoneInfo from './phone-info.js';
import store from '@/store'
let timer = null;
let numloop = 0;
import {
	pushEscalation // 绑定别名的接口
} from "@/api/client-notice.js"

// 消息推送 应用配置(这些给后端用的)
const uniPushObj = {
	cid: "",
	AppID: "你的AppID",
	AppKey: "你的AppKey",
	AppSecret: "你的AppSecret",
	MasterSecret: "你的MasterSecret",
}

export default {
	getInfo() {
		uni.getSystemInfo({
			success: res => {
				phoneInfo.systemInfo = res;
			}
		});
	},
	// 开启监听推送 
	pushListener() {
		const token = uni.getStorageSync("token") || store.state.token;
		const platform = phoneInfo.systemInfo.platform.toLowerCase();
		// 点击推送信息
		plus.push.addEventListener('click', res => {
			// 其实在这里就可以根据你自己的业务去写了
			if (token) {
				if (platform == 'android') {
					const msg_type = res.payload.msg_type // 0 在线 || 1 离线
					// 做些什么 这里处理你的逻辑
					if (msg_type == 0) {
						console.log('安卓------在线');
					} else {
						console.log('安卓------离线');
					}
				} else {
					//  在线
					if (res.aps == null) {
						console.log('苹果------在线');
					} else {
						// 离线
						console.log('苹果------离线');
					}
				}
			} else {
				// 这里跳登录页了
				uni.redirectTo({
					url: `pages/Login-Reg/Login/email-login`
				})
			}
		});
		// 接收推送信息  在线
		plus.push.addEventListener('receive', res => {
			const messageTitle = res.title;
			const messageContent = res.content;
			if (platform == 'android') {
				/***  
				  安卓监听不到  因为安卓这个格式被封装了，做成了通知栏展示
				  换个格式就行（比如里面多个字段，或换个字段名）
				*/
				/***
				  此格式的透传消息由 unipush 做了特殊处理， 会自动展示通知栏 
				  开发者也可自定义其它格式， 在客户端自己处理
				*/
				//   "push_message": {
				//     "transmission": "{
				//       title:\"标题\",
				//       content:\"内容\",
				//       payload:\"自定义数据\"
				//     }"
				//   },
				// Hbulidx 版本大于 ## 3.4.18，安卓不再通知栏展示, 需要自行创建通知
				plus.push.createMessage(messageContent, res.payload, {
					title: messageTitle
				});
				// 或者在 onlaunch 写入
				// plus.push.setAutoNotification(true);
			} else {
				const type = res.type
				//【APP离线】收到消息，但没有提醒（发生在一次收到多个离线消息时，只有一个有提醒，但其他的没有提醒）  
				//【APP在线】收到消息，不会触发系统消息,需要创建本地消息，但不能重复创建
				// 必须加msg.type验证去除死循环        
				if (res.aps == null && type == "receive") {
					//创建本地消息,发送的本地消息也会被receive方法接收到，但没有type属性，且aps是null  
					plus.push.createMessage(messageContent, res.payload, {
						title: messageTitle
					});
				}
			}
		});
	},
	// 循环获取clientid信息,直到获取到为止
	getClientInfoLoop() {
		plus.push.getClientInfoAsync(info => {
			// 如果info不存在，或者info存在，cid不存在则再次获取cid
			if (!info || !info.clientid) {
				console.log("cid为空=========================================");
				let infoTimer = null;
				infoTimer = setInterval(function() {
					if (cid) {
						clearInterval(infoTimer); //清定时器
						uni.showModal({
							content: cid
						})
						uni.setStorageSync('cid', cid);
						uniPushObj.cid = cid
					}
				}, 50);
			} else if (info && info.clientid) {
				let cid = info.clientid;
				uni.setStorageSync('cid', cid);
				uniPushObj.cid = cid
			}
		}, function(e) {
			console.log('Failed', JSON.stringify(e));
			let pinf = plus.push.getClientInfo();
			let cid = pinf.clientid; //客户端标识 
			if (cid) {
				uni.setStorageSync('cid', cid);
				uniPushObj.cid = cid
			}
		})
	},
	/** 
	 * 向后台传送cid，绑定别名
	 */
	passCid() {
		pushEscalation({
			"appid": uniPushObj.AppID,
			"cid": uniPushObj.cid
		}).then(response => {
			if (response.Code == 0) {
				console.log('----------> cid 绑定别名成功', response);
			}
		})
	},
}